package queue;

/**
 * @author
 * @date 2021 年 12 月 30 日
 */
//queue.java
// demonstrates queue
//to run this program: c>java QueueApp
public class Queue {
    private  int maxSize;
    private  long[] queArray;
    private  int front;
    private  int rear;
    private  int nItems;
    public Queue(int s) {//constructor
        maxSize = s;
        queArray =   new  long[maxSize];
        front = 0 ;
        rear=-1;
        nItems = 0;
    }
    public void  insert(long j ) //put item at rear of queue
    {
        if (rear==maxSize-1){ //deal with wraparound
                   rear=-1;
        }
        queArray[++rear]=j;//increment rear and insert
        nItems++; //one more item
    }
    public  long remove(){//take item from front of queue
        long temp = queArray[front++];    //get value and  front
        if (front==maxSize){           //deal with wraparound
            front=0;

        }
        nItems--;                     //one less item
        return  temp;
    }
    public long peekFront(){      //peek at front of queue
        return queArray[front];
    }
    public boolean isEmpty(){//true if queue is empty
        return (nItems==0);
    }
    public boolean isFull(){ //true if queue is full
        return (nItems==maxSize);
    }
    public int size(){  // number of items in queue
        return  nItems;
    }
}//end class Queue
class  QueueApp{
    public static void main(String[] args) {
        Queue theQueue = new Queue(5); //queue holds 5 items
        theQueue.insert(10);  //insert 4 items
        theQueue.insert(20);
        theQueue.insert(30);
        theQueue.insert(40);

        theQueue.remove();  //remove 3 items
        theQueue.remove();  //(10,20,30)
        theQueue.remove();
        theQueue.insert(50);  //insert 4 more items
        theQueue.insert(60);  //(wraps around)
        theQueue.insert(70);
        theQueue.insert(80);
        while (!theQueue.isEmpty()){
            long n =theQueue.remove();  //(40,50,60,70,80)
            System.out.println(n);
            System.out.println(" ");
        }
        System.out.println("");
        theQueue.insert(90);
        theQueue.insert(90);
        theQueue.insert(90);
        theQueue.insert(90);
        theQueue.insert(90);

        System.out.println(theQueue.isFull());
    }//end main()
}//end class QueueApp
